//package com.bw.Interceptor;
//
//import com.bw.annontation.RequiredPermission;
//import org.apache.commons.lang3.StringUtils;
//import org.springframework.http.HttpStatus;
//import org.springframework.util.CollectionUtils;
//import org.springframework.web.method.HandlerMethod;
//import org.springframework.web.servlet.ModelAndView;
//import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import java.util.Set;
//
///**
// * Created by qpx on 2018/5/18.
// */
//public class SecurityPMSInterceptor extends HandlerInterceptorAdapter {
//    @Override
//    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//        // 验证权限
//        if (this.hasPermission(handler)) {
//            return true;
//        }
//        //  null == request.getHeader("x-requested-with") TODO 暂时用这个来判断是否为ajax请求
//        // 如果没有权限 则抛403异常 springboot会处理，跳转到 /error/403 页面
//        response.sendError(HttpStatus.FORBIDDEN.value(), "无权限");
//        return false;
//    }
//
//    /**
//     * 是否有权限
//     *
//     * @param handler
//     * @return
//     */
//    private boolean hasPermission(Object handler) {
//        if (handler instanceof HandlerMethod) {
//            HandlerMethod handlerMethod = (HandlerMethod) handler;
//            // 获取方法上的注解
//            RequiredPermission requiredPermission = handlerMethod.getMethod().getAnnotation(RequiredPermission.class);
//            // 如果方法上的注解为空 则获取类的注解
//            if (requiredPermission == null) {
//                requiredPermission = handlerMethod.getMethod().getDeclaringClass().getAnnotation(RequiredPermission.class);
//            }
//            // 如果标记了注解，则判断权限
//            if (requiredPermission != null && StringUtils.isNotBlank(requiredPermission.value())) {
//                // redis或数据库 中获取该用户的权限信息 并判断是否有权限
//                Set<String> permissionSet = null;
//                if (CollectionUtils.isEmpty(permissionSet) ){
//                    return false;
//                }
//                return permissionSet.contains(requiredPermission.value());
//            }
//        }
//        return true;
//    }
//
////    @Override
////    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
////        // TODO          log.info("--------------处理请求完成后视图渲染之前的处理操作---------------");
////
////    }
////
////    @Override
////    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
////        // TODO         log.info("---------------视图渲染之后的操作-------------------------0");
////
////    }
//}
